home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 45
/
Aminet 45 (2001)(GTI - Schatztruhe)[!][Oct 2001].iso
/
Aminet
/
game
/
role
/
ldmud-3.2-bin.lha
/
mud
/
doc
/
efun
/
map
< prev
next >
Wrap
Text File
|
2001-04-06
|
3KB
|
86 lines
SYNOPSIS
mixed * map(mixed *arg, string func, string|object ob
, mixed extra...)
mixed * map(mixed *arg, closure cl, mixed extra...)
mixed * map(mixed *arg, mapping m)
mapping map(mapping arg, string func, string|object ob
, mixed extra...)
mapping map(mapping arg, closure cl, mixed extra...)
DESCRIPTION
Call the function <ob>-><func>() resp. the closure <cl> for
every element of the array or mapping <arg>, and return a result
made up from the returned values.
If <ob> is omitted, or neither a string nor an object, it
defaults to this_object().
If <arg> is an array, the function will be called with each
of the array elements as first parameter, followed by the
<extra> arguments. The result of the efun is an array with
all the results returned from the function calls. Thus the
operation could be described as:
foreach(index) result[index] = ob->func(arg[index], extra...)
If <arg> is an array, and a mapping is specified instead
of a function, the result is an array with the values found
in the mapping for the original values, resp. with the original
values for which no mapping entry exists. In other words:
foreach(index)
if (arg[index] exists as key in map)
result[index] = map[arg[index]]
else
result[index] = arg[index]
If <arg> is a mapping, the function will be called with
each of the mapping keys as first, and (if existing) the
associated values as second parameter, followed by the <extra>
arguments (these must not be protected references like &(i[0]). The
result of the efun is a mapping of all results of the function calls,
stored under their corresponding key.
Depending on the width of the mapping <arg>, the operation can
be described as:
foreach (key in arg)
switch (widthof(arg))
case 0:
result[key] = ob->func(key, 0, extra...)
case 1:
result[key] = ob->func(key, arg[key], extra...)
else :
result[key] = ob->func( key
, ({ arg[key,0] ...arg[key,width-1] })
, extra...)
The advantage of this approach is that the two types of
multi-dimensional mappings (mappings with multiple values
per key, and mappings of arrays) can be treated in the same way.
Note that map() used with arrays behaves like map_array(), but used
with mappings generalises map_indices()!
EXAMPLES
arr = ({ 1, 2, 3, 4 });
m = ([ 1:-1, 3:-3 ]);
map(arr, #'%, 2) --> returns ({ 1, 0, 1, 0 })
map(arr, m) --> returns ([ -1, 2, -3, 4 })
HISTORY
Introduced in LDMud 3.2.6, obsoletes map_array().
LDMud 3.2.8 added the feature of mapping an array through a mapping.
SEE ALSO
filter(E), filter_indices(E), map_indices(E), map_objects(E)